package cn.xxluckey.util;

public class ProtocolUtil {

    /**
     * 将小数值编码为整数并以小端字节序表示
     *
     * @param value 小数值（如 225.1）
     * @param scale 保留小数位数（如 1 表示保留 1 位小数）
     * @return 编码后的字节数组
     */
    public static byte[] encodeDecimal(double value, int scale) {
        // 计算倍率
        int multiplier = (int) Math.pow(10, scale);
        int intValue = (int) (value * multiplier);

        // 转为小端字节序
        return new byte[] {
                (byte) (intValue & 0xFF),        // 低位字节
                (byte) ((intValue >> 8) & 0xFF) // 高位字节
        };
    }

    public static void main(String[] args) {
        // 示例：电压 225.1，保留 1 位小数
        double voltage = 225.1;
        byte[] encodedVoltage = encodeDecimal(voltage, 1);

        // 输出结果
        System.out.println("编码后的电压值: " + bytesToHex(encodedVoltage)); // CB 08

        // 示例：数值 3.141，保留 2 位小数
        double number = 3.141;
        byte[] encodedNumber = encodeDecimal(number, 2);
        System.out.println("编码后的数值: " + bytesToHex(encodedNumber)); // 3A 01
    }

    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02X ", b));
        }
        return sb.toString().trim();
    }
}
